package com.xrh.core.generater.mongo;

import java.io.File;
import java.io.IOException;
import java.util.List;

import com.xrh.core.generater.bean.UserInput;
import com.xrh.core.generater.interfaces.TemplateRootPath;
import com.xrh.core.generater.utils.Constant;
import com.xrh.core.generater.utils.FileUtils;
import com.xrh.core.generater.utils.MarkEnum;
import com.xrh.core.generater.utils.TemplateNameEnum;
import com.xrh.core.generater.utils.TemplateReader;
import com.xrh.core.generater.utils.JavaFileAttributeUtils.Attribute;
import com.xrh.core.generater.utils.JavaFileAttributeUtils.MongoEntityInfo;

//UpdateVo文件生成器
public class UpdateRequestGenerater {

		//生成文件
		public static void generateFile(UserInput userInput , MongoEntityInfo tableInfo , TemplateRootPath templateRootPath) throws IOException{
			
			String templateTxt = generateTemplateTxt(userInput, tableInfo, templateRootPath);
			
			FileUtils.generateFile(userInput.getOutputDirPath() + File.separator + "request"  + File.separator + "updateRequest", tableInfo.getBigClassName() + "UpdateRequest.java", templateTxt);
	
		}
		
		/**
		* @function 生成模板字符串
		* @author 肖荣辉
		* @date 2018年10月23日
		*/
		public static String generateTemplateTxt(UserInput userInput , MongoEntityInfo tableInfo , TemplateRootPath templateRootPath) throws IOException{
			
			String templateTxt =  TemplateReader.readTextTemplate(templateRootPath , TemplateNameEnum.UpdateRequest模板.name());
			
			//通用替换
			templateTxt = MarkEnum.replaceMark(templateTxt , userInput , tableInfo);
			
			//私有属性文本
			templateTxt = MarkEnum.replace(MarkEnum.PRIVATE_PROPERTY_MARK , templateTxt , generatePrivatePropertyTxt(tableInfo));
	
			return templateTxt;
		}
		

		//生成私有属性文本
		private static String generatePrivatePropertyTxt(MongoEntityInfo tableInfo) {
			
			List<Attribute> attributeList = 	tableInfo.getAttributeList();
			
			StringBuilder sb = new StringBuilder();
			
			 String tab1 = "\n\t";
			 
			 String txt = 	tab1 + "/**"+Constant.COMMENT_MARK+" */"+
									Constant.ANNOTATION_MARK +
					 				tab1 + "private "+Constant.JAVA_TYPE_NAME_MARK + " "+Constant.PROPERTY_NAME_MARK+";";
			  
			 for(Attribute item : attributeList){
				
				  
				  sb.append(txt.replaceAll(Constant.COMMENT_MARK, item.getComment())
						  			.replaceAll(Constant.JAVA_TYPE_NAME_MARK, item.getType())
						  			.replaceAll(Constant.ANNOTATION_MARK, generateAnnotationTxt(tab1, item.getComment()))
						  			.replaceAll(Constant.PROPERTY_NAME_MARK, item.getName())).append("\n");
				  
			}
			
			return sb.toString().trim();
			
		}
		
		/**
		 * @function 生成注解标记
		 * @author 肖荣辉
		 * @date 2021年6月29日
		*/
		private static String generateAnnotationTxt(String tab , String comment) {
			
			String txt = "";
			
			txt+= tab + "@ApiModelProperty(\""+comment+"\")";
			
			return txt;
		}
		
}
